<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // __proto__ 是一个属性访问器
    // 比如将一个对象的原型设置为数字或者字符串类型，是不生效的
    let obj = {}
    obj.__proto__ = '3545634534'
    console.log(obj.__proto__);  // 并不会打印出设置的字符串
    // 这说明对于__proto__ 的设置，一定是步入了一个访问器，在设置的时候进入setter 判断类型
    let newObj = {
      action: {},
      get proto() {
        return this.action
      },
      set proto(val) {
        // 优先判断指定的新值是不是Object类型数据
        if (val instanceof Object) {
          this.action = val
        }
        return
      }
    }

    // 测试newObj
    console.log(newObj)
    newObj.proto = '123'
    console.log(newObj.proto) // 显示依然是一个空对象,说明重新赋值为object之外的数据,并不生效
    // 在此做的proto属性,就是模拟__proto__的特性

  </script>
</body>

</html>
